﻿using GalaSoft.MvvmLight;
using System.Collections.ObjectModel;
using SGT.Model;
using GalaSoft.MvvmLight.Command;
using SGT.Views;
using GalaSoft.MvvmLight.Messaging;

namespace SGT.ViewModel
{
    /// <summary>
    /// This class contains properties that a View can data bind to.
    /// <para>
    /// Use the <strong>mvvminpc</strong> snippet to add bindable properties to this ViewModel.
    /// </para>
    /// <para>
    /// You can also use Blend to data bind with the tool's support.
    /// </para>
    /// <para>
    /// See http://www.galasoft.ch/mvvm/getstarted
    /// </para>
    /// </summary>
    public class ABMDepositosViewModel : ViewModelBase
    {
        /// <summary>
        /// Initializes a new instance of the ABMDepositosViewModel class.
        /// </summary>
        private ObservableCollection<Deposito> _Depositos;
        private ObservableCollection<Mercaderia> _Mercaderias;
        private Sector _SectorNuevo;
        private Deposito _DepositoSeleccionado;
        private Deposito _NuevoDepositoACrear;
        private Mercaderia _MercaderiaSeleccionada;
        public RelayCommand NuevoSector { get; private set; }
        public RelayCommand AgregarSector { get; private set; }
        public RelayCommand CrearDeposito { get; private set; }
        public RelayCommand EstablecerDepositoActual { get; private set; }

        public Deposito NuevoDepositoACrear
        {
            get { return _NuevoDepositoACrear; }
            set
            {
                _NuevoDepositoACrear = value;
                RaisePropertyChanged("NuevoDepositoACrear");
            }
        }

        public Deposito DepositoSeleccionado
        {
            get { return _DepositoSeleccionado; }
            set
            {
                _DepositoSeleccionado = value;
                RaisePropertyChanged("DepositoSeleccionado");
            }
        }
        
        
        public ObservableCollection<Deposito> Depositos
        {
            get { return _Depositos; }
            set
            {
                _Depositos = value;
                RaisePropertyChanged("Depositos");
            }
        }

        public ObservableCollection<Mercaderia> Mercaderias
        {
            get { return _Mercaderias; }
            set
            {
                //esto no puede ser asi, ver de cambiar
                _Mercaderias = value;
                RaisePropertyChanged("Mercaderias");
            }
        }

                
        public Mercaderia MercaderiaSeleccionada
        {
            get { return _MercaderiaSeleccionada; }
            set
            {
                _MercaderiaSeleccionada = value;
                RaisePropertyChanged("MercaderiaSeleccionada");
            }
        }

        public Sector SectorNuevo
        {
            get { return _SectorNuevo; }
            set
            {
                _SectorNuevo = value;
                RaisePropertyChanged("SectorNuevo");
            }
        }


        
        
        public ABMDepositosViewModel()
        {
            if (IsInDesignMode)
            {
            ///    // Code runs in Blend --> create design time data.
            }
            else
            {
                _Depositos = ManejadorDepositos.GetDepositos();
                _Mercaderias = ManejadorDepositos.GetMercaderias();
                NuevoSector = new RelayCommand(MostarNuevoSector);
                AgregarSector = new RelayCommand(AgregarNuevoSectorColeccion);
                CrearDeposito = new RelayCommand(GuardarDeposito);
                EstablecerDepositoActual = new RelayCommand(EstablecerDepositoActualAccion);
                _SectorNuevo = new Sector();
              
            }
        }

        private void MostarNuevoSector()
        {
            var nuevoSector = new NuevoSectorView();
            nuevoSector.ShowDialog();
        }

        private void AgregarNuevoSectorColeccion()
        {
            if (NuevoDepositoACrear == null)
                NuevoDepositoACrear = new Deposito();
            if (NuevoDepositoACrear.ColeccionSectores == null)
                NuevoDepositoACrear.ColeccionSectores = new ObservableCollection<Sector>();

            SectorNuevo.TipoMercaderia = MercaderiaSeleccionada;
            NuevoDepositoACrear.ColeccionSectores.Add(SectorNuevo);
            SectorNuevo = new Sector();
            //NuevoDepositoACrear = _NuevoDepositoACrear;
            
        }

        private void GuardarDeposito()
        {
            ManejadorDepositos.InsertarDeposito(NuevoDepositoACrear);
            _Depositos.Clear();
            Depositos = ManejadorDepositos.GetDepositos();
        }

        private void crearDepositoNuevo()
        {
            if (_NuevoDepositoACrear == null)
                _NuevoDepositoACrear = new Deposito();
            
        }

        private void EstablecerDepositoActualAccion()
        {
            ManejadorDepositos.EstablecerDepositoActual(DepositoSeleccionado);
            Messenger.Default.Send<Deposito, MainViewModel>(DepositoSeleccionado);
            
        }

      
        ////public override void Cleanup()
        ////{
        ////    // Clean own resources if needed

        ////    base.Cleanup();
        ////}
    }
}